package com.yao.smy.utils;

import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;

import java.util.Map;

public class HttpUtils {

    private static final RestTemplate restTemplate = new RestTemplate();

    /**
     * 发送GET请求
     *
     * @param url 请求URL
     * @param responseType 返回类型
     * @param <T> 返回类型泛型
     * @return 返回结果
     */
    public static <T> T get(String url, Class<T> responseType) {
        return restTemplate.getForObject(url, responseType);
    }

    /**
     * 发送GET请求
     *
     * @param url 请求URL
     * @param responseType 返回类型
     * @param uriVariables URI参数
     * @param <T> 返回类型泛型
     * @return 返回结果
     */
    public static <T> T get(String url, Class<T> responseType, Map<String, ?> uriVariables) {
        return restTemplate.getForObject(url, responseType, uriVariables);
    }

    /**
     * 发送POST请求
     *
     * @param url 请求URL
     * @param requestBody 请求体
     * @param responseType 返回类型
     * @param <T> 返回类型泛型
     * @return 返回结果
     */
    public static <T> T post(String url, Object requestBody, Class<T> responseType) {
        return restTemplate.postForObject(url, requestBody, responseType);
    }

    /**
     * 发送POST请求
     *
     * @param url 请求URL
     * @param requestBody 请求体
     * @param responseType 返回类型
     * @param uriVariables URI参数
     * @param <T> 返回类型泛型
     * @return 返回结果
     */
    public static <T> T post(String url, Object requestBody, Class<T> responseType, Map<String, ?> uriVariables) {
        return restTemplate.postForObject(url, requestBody, responseType, uriVariables);
    }

    /**
     * 发送POST请求，自定义请求头
     *
     * @param url 请求URL
     * @param requestBody 请求体
     * @param headers 请求头
     * @param responseType 返回类型
     * @param <T> 返回类型泛型
     * @return 返回结果
     */
    public static <T> T post(String url, Object requestBody, HttpHeaders headers, Class<T> responseType) {
        HttpEntity<Object> requestEntity = new HttpEntity<>(requestBody, headers);
        return restTemplate.exchange(url, HttpMethod.POST, requestEntity, responseType).getBody();
    }
}